#include <stdio.h>
#include <math.h>

#define VECTOR_LENGTH 5
// 函数声明
extern void vec_calc(float x[], float y[], int N,
                     float *product, float *x_len, float *y_len,
                     float sum[]);

int main(void)
{
    /* 读入数组x和y */
    float x[VECTOR_LENGTH] = {0.0};
    float y[VECTOR_LENGTH] = {0.0};
    printf("Input vector x:\n");
    int i = 0;
    for (i = 0; i < VECTOR_LENGTH; i++)
        scanf("%f", &x[i]);
    printf("Input vector y:\n");
    for (i = 0; i < VECTOR_LENGTH; i++)
        scanf("%f", &y[i]);

    // 准备函数参数
    float product, x_len, y_len;
    float sum[VECTOR_LENGTH] = {0.0};
    // 调用函数
    vec_calc(x, y, VECTOR_LENGTH,
             &product, &x_len, &y_len, sum);

    /* 输出计算结果*/
    printf("x*y = %f\n", product);
    printf("||x|| = %f\n", x_len);
    printf("||y|| = %f\n", y_len);
    printf("x+y = \n");
    printf("(");
    for (i = 0; i < VECTOR_LENGTH; i++)
        printf("%f,", sum[i]);
    printf(")\n");
    return 0;
}

void vec_calc(float x[], float y[], int N,
              float *product, float *x_len, float *y_len,
              float sum[])
{
    // 计算product
    float prod_sum = 0.0;
    int i = 0;
    for(i = 0; i < N; i++)
        prod_sum = prod_sum + x[i] * y[i];
    *product = prod_sum; // 点积计算结果通过指针变量product返回
    // 计算x的长度
    float len_sum = 0.0;
    for(i = 0; i < N; i++)
        len_sum = len_sum + x[i] * x[i];
    *x_len = sqrt(len_sum); // x长度通过指针变量x_len返回
    // 计算y的长度
    len_sum = 0.0;
    for(i = 0; i < N; i++)
        len_sum = len_sum + y[i] * y[i];
    *y_len = sqrt(len_sum); // y长度通过指针变量y_len返回
    // 计算x+y
    for(i = 0; i < N; i++)
        sum[i] = x[i] + y[i];
}